package com.atguigu.activemq.queue;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

//消息消费者编码
public class JmsConsumer {
//    public static final String ACTIVEMQ_URL="tcp://124.70.84.192:61616";
    public static final String QUEUE_NAME="queue_lemon";
    public static final String ACTIVEMQ_URL="tcp://124.70.84.192:61616";
    //先写死连接地址,tcp协议，以“tcp://”开头，端口号写后端进程端口号
    public static void main(String[] args) throws Exception {
        //1、创建连接工厂,根据url地址
        //如果用户名密码都是默认的admin的话，连接可以用一个参数的构造方法，不然要用三个参数的构造方法，用户名密码url;
        ActiveMQConnectionFactory activeMQConnectionFactory=new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        //2、通过连接工厂，获得连接connection并启动访问
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        /*3、创建会话session;参数1:是否开启事务；参数2:签收；*/
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4、创建目的地(具体是队列queue还是主题topic),参数填队列名字；
        Queue queue = session.createQueue(QUEUE_NAME);
        //5、创建消息消费者
        MessageConsumer messageConsumer = session.createConsumer(queue);
        System.out.println("2号消费者");
        /*1、同步阻塞方式（receive()）
            订阅者或着说接收者调用messageConsumer.receive()来接受消息，在接收到消息之前将一直阻塞
            */
//        while (true){
//            TextMessage textMessage= (TextMessage)messageConsumer.receive();
//            //receive()方法可以写一个参数，参数为最长等待时间，不写一直等待
//            //发送消息是什么格式，介绍消息就需要转化为什么格式
//            if(null!=textMessage){
//                System.out.println(textMessage.getText());
//            }else {
//                break;
//            }
//        }//6、关闭资源(正着开启，倒着关闭)

        /*2、通过监听的方式来消费消息
            来实现有消息就消费，没消息就不管的效果
            */
        messageConsumer.setMessageListener(new MessageListener() {
            //设置消息监听器，可以采用匿名内部类的方式
            @Override
            public void onMessage(Message message) {
                if(null!=message&&message instanceof TextMessage){
                    //如果message不为空且message为TextMessage类的话执行下面内容
                    TextMessage textMessage= (TextMessage)message;
                    try {
                        String c01 = textMessage.getStringProperty("c01");
                        int vip = textMessage.getIntProperty("vip");
                        boolean vip8 = textMessage.getBooleanProperty("vip8");
                        //textMessage.setByteProperty(...);
                        System.out.println(textMessage.getText()+";"+c01+";"+vip+";"+vip8);
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        System.in.read();
        messageConsumer.close();
        session.close();
        connection.close();
    }
}
